1. 搭建 Docker官方有提供一个私有仓库的镜像为“Registry ”,只需要将镜像下载下来,并运行在5000端口 即可使用。具体指令如下所示:
1 2 $ docker pull registry:2 $ docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2
上述指令表示,将registry镜像以后台方式运行在5000端口并将容器内部路径的/var/lib/registry挂载至/opt/registry外部路径下。
随后使用Curl命令进行测试,测试结果如下说明私有库已成功搭建。
1 2 $ curl http://localhost:5000/v2 <a href="/v2/">Moved Permanently</a>
2. 验证 选择一台联网的请求资源机,随后查看本地镜像:
1 2 3 4 5 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest b4f6a90c69a4 4 days ago 647MB registry 2 2d4f4b5309b1 5 weeks ago 26.2MB openjdk 11.0.7-jdk fcfdce4526df 6 weeks ago 627MB
随后将要推送的image的名称更改为 3.2 镜像命名格式 中的正确格式 ,如下所示:
1 $ docker tag image_name:tag domain_name:5000/image_name:tag
随后使用push命令提交至私有库尝试是否有效:
1 2 $ docker pull domain_name:5000/imagename:tag Error response from daemon: Get https://localhost:5000/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
出现上述情况,则说明请求端未创建Docker网络注册 ,可通过 3.1 请求端配置 中所述方法,添加私库IP至注册文件中 。
再次进行镜像推送,无发现问题,如下所示:
1 2 3 4 5 $ docker push 192.168.3.xxx:5000/testimage:latest The push refers to repository [192.168.3.xxx:5000/testimage] f8fbfaa06b1b: Pushed df64d3292fd6: Pushed latest: digest: sha256:95620571bbadef953aef8d378ea254b177745d1bf954d635b0349926c53f4f21 size: 2614
至此,Docker私有库搭建完成。
3. 配置 3.1 请求端配置 与Docker Regisry通信Pull或Push镜像资源,需要在请求端配置如下属性,其中可配置域名或IP地址,对应端口号。
1 2 3 4 5 6 7 8 [dockers@dockerhub ~]$ sudo vim /etc/docker/daemon.json { "insecure-registries": [ "domain_name:5000", "192.168.3.xxx:5000" ] } # :wq保存后退出
在配置完成后进行保存并通过systemctl restart docker
指令重启docker服务。
3.2 镜像命名格式 由于镜像需要正确在命名格式才能正确识别并Push或Pull 。因此,镜像应命名为域名:端口号/镜像名称:TAG标记
格式,并确保所命名的域名与端口号已通过 3.1 请求端配置 ,如下所示。
1 2 # 重命名镜像名称 $ docker tag image_name:tag domain_name:5000/image_name:tag
4. 其他 4.1 如何查看已PUSH镜像
直接访问http://domain_name:5000/v2/_catalog
即可。
1 2 $ curl domain_name:5000/v2/_catalog {"repositories":["xxxx","testimage","xxxx"]}
4.2 Registry查看配置 1 2 # 查看默认配置 $ docker exec -it registry sh -c 'cat /etc/docker/registry/config.yml'
4.3 Registry开启删除 1 2 3 # 开启删除(添加 delete: enabled: true ) $ docker exec -it registry sh -c "sed -i '/storage:/a\ delete:'/etc/docker/registry/config.yml $ docker exec -it registry sh -c " sed -i '/delete:/a\ enabled: true' /etc/docker/registry/config.yml"
4.4 重启Registry 1 $ docker restart registry
4.5 查询镜像 1 2 3 4 5 # 查询镜像 $ curl <仓库地址>/v2/_catalog # 查询镜像tag(版本) $ curl <仓库地址>/v2/<镜像名>/tags/list
4.6 删除镜像 1 2 3 4 5 6 # 删除镜像API $ curl -I -X DELETE "<仓库地址>/v2/<镜像名>/manifests/<镜像digest_hash>" # 获取镜像digest_hash $ curl <仓库地址>/v2/<镜像名>/manifests/<tag> \ --header "Accept: application/vnd.docker.distribution.manifest.v2+json"
Author:
zchengb
License:
Copyright (c) 2019-2024 zchengb